import { ActionTree } from 'vuex';
import jwt_decode from 'jwt-decode';
import { asyncRouterMap } from '.././router'
const actions: ActionTree<any, any> = {
  async setUser({ state, commit }, user: string) {
    const decoded: any = jwt_decode(user);
    commit('SET_USER', decoded);

    const { key } = decoded;
    let accessedRouters = filterAsyncRouter(asyncRouterMap, key);
    //配置到vuex 中
    commit('SET_ROUTERS', accessedRouters);

  }
}
//asyncRouterMap  是全部的路由  对象
// roles  是当前的用户
function filterAsyncRouter(asyncRouterMap: Array<any>, roles: string) {
  //过滤操作
  const accessedRouters =asyncRouterMap.filter(route => {
    if (hasPermission(roles, route)) {
      //如果外层有孩子节点 我们需要递归判断
      if (route.children && route.children.length) {
        route.children = filterAsyncRouter(route.children, roles);
      }
      return true;
    } else {
      return false;
    }
  });

  return accessedRouters;
}
function hasPermission(roles: any, route: any) {
  if (route.meta && route.meta.roles) {
    // 如果meta.roles是否包含角色的key值,如果包含那么就是有权限,否则无权限
    // indexOf 如果不存在 返回-1 
    //some  的方法返回布尔值 
    return route.meta.roles.some((role: string) => role.indexOf(roles) >= 0);

    //如果我们可以在 role 中找到 当前的key  也就是roles  我们会返回 不等于 -1  的数字 也就是大于 0 , 判断为真
    // some  方法 我们得到为true 
    // 返回 true 证明有权限  没有就false  
  } else {
    //不设置权限
    //如果不存在meta  或者 roles 证明 不是要给予权限的路由 我们就给他默认有权限
    return true
  }
}
export default actions;